windows下QT编译mysql插件踩坑与解决

您所在的位置:网站首页 qt src文件 windows下QT编译mysql插件踩坑与解决

windows下QT编译mysql插件踩坑与解决

2024-07-11 23:35| 来源: 网络整理| 查看: 265

问题描述:

在QT Widget Application项目中连接mysql时报错:

QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7 原因:

由于QT默认没有mysql插件,因此无法正确连接mysql。

主要过程: 1、安装QT、mysql(建议都安装64位) 2、配置环境变量 3、编译mysql驱动

需要把$(你电脑上QT的安装位置)替换为自己电脑上的文件夹路径

① 定位到文件夹 “$(你电脑上QT的安装位置)\QT\5.12.9\Src\qtbase\src\plugins\sqldrivers” 下,然后用QT Creater打开sqldrivers.pro文件,注意一定要选择“MinGW 64-bit”的套件(与mysql位数对应)。 ② 打开“mysql/mysql.pro”文件, 在这里插入图片描述 将“QMAKE_USE += mysql”注释掉,变为:

#QMAKE_USE += mysql

然后在这一行下面加入以下3行:

win32:LIBS += -L$$quote($(你的MySQL安装位置)/MySQL Server 5.7/lib) -llibmysql INCLUDEPATH += $$quote($(你的MySQL安装位置)/MySQL Server 5.7/include) DEPENDPATH += $$quote($(你的MySQL安装位置)/MySQL Server 5.7/include)

③ 构建项目 (如果报错为:不能连接到mysql.h,表明你在第②步出错,检查一下路径有没有写错,路径斜杠是否打反了) (如果报错了100多个qsql_mysql.cpp的错误,表明第①步出错,检查以下MinGW的位数是否与mysql对应的上)

④ 在 “$(你电脑上QT的安装位置)\QT\5.12.9\Src\qtbase\src\plugins\” 下会出现一个名如 “build-sqldrivers-Desktop_Qt_5_12_9_MinGW_64_bit-Debug” 的文件夹,进入此文件夹,并继续定位到文件夹 “plugins/sqldrivers/” 内,如果存在图中这两个.dll文件,表明编译成功了!进行下一步。(如果没出现这两个文件,尝试多重新构建两次) 在这里插入图片描述

4、拷贝文件

将上一步生成的两个.dll文件拷贝到文件夹 “$(你电脑上QT的安装位置)\QT\5.12.9\mingw73_64\plugins\sqldrivers\” 下;

将 “$(你的MySQL安装位置)/MySQL Server 5.7/lib” 下的libmysql.dll文件,拷到 “$(你电脑上QT的安装位置)\QT\5.12.9\mingw73_64\bin\” 下;

完成!

5、测试

新建一个MinGW 64-bit项目; 在项目.pro文件中加入一行 “QT +=sql” 。

mainwindow.h:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void connectMYSQL(); void createDB(); void initDB(); QSqlDatabase database; private: Ui::MainWindow *ui; public slots: void connectDatabase();//连接数据库 }; #endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); QMenuBar *menuBar = this->menuBar(); QMenu *menuFile = menuBar->addMenu("服务器"); QAction *openAction = menuFile->addAction("连接数据库"); connect(openAction, &QAction::triggered, this, &MainWindow::connectDatabase); } MainWindow::~MainWindow() { delete ui; } //连接数据库 void MainWindow::connectDatabase(){ if (QSqlDatabase::contains("MySQL"))//判断testConnect连接是否存在并连接 { database = QSqlDatabase::database("MySQL"); } else //未连接则新建数据库连接 { database=QSqlDatabase::addDatabase("QMYSQL","MySQL");//创建数据库连接,并为其命名testConnect database.setHostName("127.0.0.1"); //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost) database.setPort(3306); //连接数据库端口号,与设置一致 database.setUserName("root"); //数据库用户名,与设置一致 database.setPassword("_____"); //数据库密码,与设置一致 } if(!database.open()) { qDebug()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3